package com.hengpeng.itfinoss.service.article;

import java.util.LinkedHashMap;
import java.util.List;
import java.util.Set;

import com.hengpeng.common.exception.ServiceResult;
import com.hengpeng.common.persist.query.model.Order.OrderType;
import com.hengpeng.itfinbase.persist.ArticleCategory;

/**
 * <pre>
 * 文章类型服务接口
 * </pre>
 * @author LMM
 * @version 1.0, 2011-8-31
 */

public interface ArticleCategorySerivce
{
	/**
	 * <pre>
	 * 新增新闻类别
	 * </pre>
	 * @param articleCategory
	 * @return
	 */
	public ServiceResult<ArticleCategory> save(ArticleCategory articleCategory);

	/**
	 * <pre>
	 *  修改新闻类别 
	 * </pre>
	 * @param articleCategory
	 * @return
	 */
	public ServiceResult<ArticleCategory> update(ArticleCategory articleCategory);

	/**
	 * <pre>
	 * 获取新闻类别 
	 * </pre>
	 * @param id 新闻类别流水号
	 * @return
	 */
	public ServiceResult<ArticleCategory> get(Long id);

	/**
	 * <pre>
	 * 加载新闻类别 
	 * </pre>
	 * @param id 新闻类别流水号
	 * @return
	 */
	public ServiceResult<ArticleCategory> load(Long id);

	/**
	 * <pre>
	 * 查询所有的新闻类别
	 * </pre>
	 * @return
	 */
	public ServiceResult<List<ArticleCategory>> findAll();

	/**
	 * <pre>
	 *  批量删除新闻类别
	 * </pre>
	 * @param ids 新闻类别流水号集合
	 * @return
	 */
	public ServiceResult<ArticleCategory> delete(Set<Object> ids);

	/**
	 * <pre>
	 *  分页查询新闻类别
	 * </pre>
	 * @param name 新闻类别名称
	 * @param parent 新闻父级类别
	 * @param pageIndex 当前页号
	 * @param pageSize 每页显示新闻类别数
	 * @param sortMap 排序集合
	 * @return
	 */
	public ServiceResult<List<ArticleCategory>> findArticleCategoryPage(String name, Long parent, Integer pageIndex,
			Integer pageSize, LinkedHashMap<String, OrderType> sortMap);

	public ServiceResult<Long> findArticleCategoryCount(String name, Long parent);

	/**
	 * <pre>
	 * 查询分组，并排序，用于前台分层显示
	 * </pre>
	 * @param categoryId 如果categoryId为null，则加载所有的组，如果不为null则不加载categoryId和它的子级组
	 * @return
	 */
	public ServiceResult<Set<ArticleCategory>> findAllArticleCategorySort(Long categoryId);

	/**
	 * <pre>
	 * 查询类别的子类被
	 * </pre>
	 * @param ids 列别ID数组
	 * @return
	 */
	public ServiceResult<List<ArticleCategory>> findChildByIds(Long[] ids);

	/**
	 * <pre>
	 * 查询一组类别
	 * </pre>
	 * @param ids 主键ID数组
	 * @return
	 */
	public ServiceResult<List<ArticleCategory>> findArticleCategoryByIds(Long[] ids);

	public List<ArticleCategory> findLevelArticleCategory(Long level);
}
